package com.school.sports.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.school.sports.entity.CertificateRecord;

import java.util.List;

/**
 * 证书记录服务接口
 */
public interface CertificateRecordService extends IService<CertificateRecord> {

    /**
     * 分页查询证书记录
     * @param currentPage 当前页码
     * @param pageSize 每页显示数量
     * @param record 查询条件
     * @return 分页结果
     */
    IPage<CertificateRecord> getPage(int currentPage, int pageSize, CertificateRecord record);

    /**
     * 生成参赛证书
     * @param userId 用户ID
     * @param projectId 项目ID
     * @param generateUserId 生成用户ID
     * @return 证书记录
     */
    CertificateRecord generateParticipationCertificate(Long userId, Long projectId, Long generateUserId);

    /**
     * 生成获奖证书
     * @param userId 用户ID
     * @param projectId 项目ID
     * @param awardId 奖项ID
     * @param awardLevel 奖项等级
     * @param generateUserId 生成用户ID
     * @return 证书记录
     */
    CertificateRecord generateAwardCertificate(Long userId, Long projectId, Long awardId, String awardLevel, Long generateUserId);

    /**
     * 生成志愿者证书
     * @param userId 用户ID
     * @param generateUserId 生成用户ID
     * @return 证书记录
     */
    CertificateRecord generateVolunteerCertificate(Long userId, Long generateUserId);

    /**
     * 生成裁判证书
     * @param userId 用户ID
     * @param generateUserId 生成用户ID
     * @return 证书记录
     */
    CertificateRecord generateRefereeCertificate(Long userId, Long generateUserId);

    /**
     * 批量生成证书
     * @param userIds 用户ID列表
     * @param certificateType 证书类型
     * @param projectId 项目ID（可选）
     * @param awardId 奖项ID（可选）
     * @param awardLevel 奖项等级（可选）
     * @param generateUserId 生成用户ID
     * @return 证书记录列表
     */
    List<CertificateRecord> batchGenerateCertificates(List<Long> userIds, String certificateType,
                                                     Long projectId, Long awardId, String awardLevel, Long generateUserId);

    /**
     * 重新生成证书
     * @param certificateId 证书ID
     * @param generateUserId 生成用户ID
     * @return 证书记录
     */
    CertificateRecord regenerateCertificate(Long certificateId, Long generateUserId);

    /**
     * 撤销证书
     * @param certificateId 证书ID
     * @return 操作结果
     */
    boolean revokeCertificate(Long certificateId);

    /**
     * 根据用户ID查询证书列表
     * @param userId 用户ID
     * @return 证书列表
     */
    List<CertificateRecord> getCertificatesByUserId(Long userId);

    /**
     * 根据项目ID查询证书列表
     * @param projectId 项目ID
     * @return 证书列表
     */
    List<CertificateRecord> getCertificatesByProjectId(Long projectId);

    /**
     * 根据奖项ID查询证书列表
     * @param awardId 奖项ID
     * @return 证书列表
     */
    List<CertificateRecord> getCertificatesByAwardId(Long awardId);

    /**
     * 根据证书编号查询证书
     * @param certificateNo 证书编号
     * @return 证书记录
     */
    CertificateRecord getCertificateByNo(String certificateNo);

    /**
     * 验证证书有效性
     * @param certificateNo 证书编号
     * @return 验证结果
     */
    boolean validateCertificate(String certificateNo);

    /**
     * 获取证书统计信息
     * @return 统计信息
     */
    List<CertificateRecord> getCertificateStatistics();

    /**
     * 根据日期范围查询证书
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 证书列表
     */
    List<CertificateRecord> getCertificatesByDateRange(String startDate, String endDate);
}